import config from './config' // 配置文件
import storage from './store' // 缓存封装

export default {
  // 打印调试日志
  console(options) {
    if(config.debug) {
      console.log('<<===============================================>>')
      console.log('request start')
      console.log('header' + JSON.stringify(options.header))
      console.log('method: ' + options.method + ' URL: ' + options.url)
      console.log(options.data)
      console.log('request end')
      console.log('<<===============================================>>')
    }
  },
  
  // 发送请求
  send(options = {}) {
    // loading加载
    uni.showLoading({ title: '加载中' })
    // 拼接路径，下面的配置文件会提到
    options.url = config.apiUrl + options.url
    // 请求方式
    options.method = options.method || 'GET'

    // 这里看项目的情况来定，如果是没有token，那就删除这里，上面的storage也不需要引入
    let token = storage.getJson('token')
    if(token != null) {
      options.header = { 'Authorization': token }
    }
    console(options) // 打印请求数据，调试用，上线可以注释
    // 发起Promise请求
    return new Promise((resolve, reject) => {
      uni.request(options).then(data => {
        const [err, res] = data
        if(err && err.data) {
          return reject(new Error(err.data.msg))
        } else if(err.code==='ERR_NETWORK' || err.message==='Network Error' || err.message.indexOf('timeout')!==-1) {
          return resolve({code: '1011', msg: '网络断开或连接超时，请检查。'})
        } else {
          return resolve({code: '1012', msg: '请求响应错误，请联系系统管理员。'})
        }
        if(res && res.data && res.data.code === 1001) {
          uni.hideLoading()
          uni.navigateTo({ url: '/pages/main/login' })
        } else if(res && res.data) {
          return resolve(res.data)
        } else {
          return resolve({code: '1010', msg: '系统错误，请联系系统管理员。'})
        }
      })
    })
  },
  
  // GET请求
  get(url = '', data = {}) {
    return send({ url: url, data })
  },
  
  // POST请求
  post(url = '', data = {}) {
    return send({ url: url, data, method: 'POST' })
  }
}